home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’95 / ProcessBar™ / Code / Sources / prefs.c < prev    next >
Encoding:
Text File  |  1995-09-10  |  2.5 KB  |  84 lines  |  [TEXT/MMCC]

  1. // File "prefs.c" - 
  2.  
  3. #include "prefs.h"
  4.  
  5. // * **************************************************************************** * //
  6. // * **************************************************************************** * //
  7.  
  8. Handle GetPrefs(long type, short version) {
  9.     short prefsRefNum, saveRefNum;
  10.     Handle rsrc, pref=0;
  11.     
  12.     saveRefNum = CurResFile();
  13.     if ((prefsRefNum = OpenPrefsFile()) == -1) return(0);
  14.     
  15.     if (! (rsrc = Get1Resource(type, version))) goto GET_PREFS_ERROR;
  16.     if (! (pref = NewHandle(GetHandleSize(rsrc)))) goto GET_PREFS_ERROR;
  17.     BlockMove(*rsrc, *pref, GetHandleSize(rsrc));
  18.  
  19.     ReleaseResource(rsrc);
  20.     
  21. GET_PREFS_ERROR:
  22.     CloseResFile(prefsRefNum);
  23.     UseResFile(saveRefNum);
  24.     return(pref);
  25.     }
  26.  
  27. // * **************************************************************************** * //
  28. // * **************************************************************************** * //
  29.  
  30. void WritePrefs(Handle pref, long type, short version) {
  31.     short prefsRefNum, saveRefNum;
  32.     Handle rsrc, oldRsrc;
  33.     
  34.     saveRefNum = CurResFile();
  35.     if ((prefsRefNum = OpenPrefsFile()) == -1) return;
  36.     
  37.     if (rsrc = Get1Resource(type, version)) RemoveResource(rsrc);
  38.     
  39.     if (pref) {
  40.         if (! (rsrc = NewHandle(GetHandleSize(pref)))) goto WRITE_PREFS_ERROR;
  41.         BlockMove(*pref, *rsrc, GetHandleSize(pref));
  42.     
  43.         AddResource(rsrc, type, version, "\p");
  44.         if (ResError()) goto WRITE_PREFS_ERROR;
  45.         WriteResource(rsrc);
  46.         }
  47.     
  48. WRITE_PREFS_ERROR:
  49.     CloseResFile(prefsRefNum);
  50.     UseResFile(saveRefNum);
  51.     }
  52.  
  53. // * **************************************************************************** * //
  54. // * **************************************************************************** * //
  55.  
  56. short OpenPrefsFile() {
  57.     short err=0, prefsRefNum;
  58.     FSSpec prefsFile;
  59.     
  60.     if (err = FindFolder(kOnSystemDisk, kPreferencesFolderType, -1,
  61.             &prefsFile.vRefNum, &prefsFile.parID)) return(-1);
  62.     BlockMove(kPrefsFileName, prefsFile.name, sizeof(prefsFile.name));
  63.         
  64.     prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
  65.     if (err = ResError()) {
  66.         if ((err != fnfErr) && (err = FSpDelete(&prefsFile))) return(-1);
  67.         if (err = CreatePrefsFile(&prefsFile)) return(-1);
  68.           prefsRefNum = FSpOpenResFile(&prefsFile, fsRdWrPerm);
  69.           }
  70.     if (ResError() == fnfErr) return(-1);
  71.     UseResFile(prefsRefNum);
  72.     return(prefsRefNum);
  73.     }
  74.  
  75. // * **************************************************************************** * //
  76. // * **************************************************************************** * //
  77.  
  78. short CreatePrefsFile(FSSpecPtr prefsFile) {
  79.     short err=0;
  80.     
  81.     FSpCreateResFile(prefsFile, kCreatorType, kPrefsFileType, 0);
  82.     return(err = ResError());
  83.     }
  84.